<template>
  <!-- 这儿绑定数据也支持 v-model，但是这儿不能直接用，因为他会直接修改 value，这并不是我们期望的 -->
  <el-cascader
    :options="options"
    :value="value"
    :props="{ label: 'name', value: 'id' }"
    @change="handleChange"
  />
</template>
<script>
import { getDepartments } from '@/api/departments'
import { arrayToTree } from 'performant-array-to-tree'
import { clearTreeEmpty } from '@/utils'

export default {
  name: 'SelectTree',
  props: {
    value: {
      type: Number,
      default: null
    }
  },
  data() {
    return {
      options: []
    }
  },

  created() {
    this.getDepartments()
  },
  methods: {
    async getDepartments() {
      const r = arrayToTree(await getDepartments(), {
        // 咱们的叫 pid 去关联的，要设置一下
        parentId: 'pid',
        // 转出来的结果不希望有 data 属性
        dataField: null,
        // 希望把 0 作为根去转换
        rootParentIds: { 0: true }
      })
      // arrayToTree 每一个对象都会添加一个 children，默认是空数组，这样会导致 el-cascader 的 Bug，选不中
      // !手动删
      clearTreeEmpty(r)
      this.options = r
    },
    handleChange(arr) {
      // 保留 arr 的一项，去修改外部的 value
      if (arr.length > 0) {
        this.$emit('input', arr[arr.length - 1])
      } else {
        this.$emit('input', null)
      }
    }
  }
}
</script>
